home *** CD-ROM | disk | FTP | other *** search
/ Inter.Net 55-1 / Inter.Net 55-1.iso / CBuilder / Setup / BCB / data.z / statreg.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-02-09  |  5.7 KB  |  180 lines

  1. // This is a part of the Active Template Library.
  2. // Copyright (C) 1996-1997 Microsoft Corporation
  3. // All rights reserved.
  4. //
  5. // This source code is only intended as a supplement to the
  6. // Active Template Library Reference and related
  7. // electronic documentation provided with the library.
  8. // See these sources for detailed information regarding the
  9. // Active Template Library product.
  10.  
  11. #ifndef __STATREG_H
  12. #define __STATREG_H
  13.  
  14. #define E_ATL_REGISTRAR_DESC              0x0201
  15. #define E_ATL_NOT_IN_MAP                  0x0202
  16. #define E_ATL_UNEXPECTED_EOS              0x0203
  17. #define E_ATL_VALUE_SET_FAILED            0x0204
  18. #define E_ATL_RECURSE_DELETE_FAILED       0x0205
  19. #define E_ATL_EXPECTING_EQUAL             0x0206
  20. #define E_ATL_CREATE_KEY_FAILED           0x0207
  21. #define E_ATL_DELETE_KEY_FAILED           0x0208
  22. #define E_ATL_OPEN_KEY_FAILED             0x0209
  23. #define E_ATL_CLOSE_KEY_FAILED            0x020A
  24. #define E_ATL_UNABLE_TO_COERCE            0x020B
  25. #define E_ATL_BAD_HKEY                    0x020C
  26. #define E_ATL_MISSING_OPENKEY_TOKEN       0x020D
  27. #define E_ATL_CONVERT_FAILED              0x020E
  28. #define E_ATL_TYPE_NOT_SUPPORTED          0x020F
  29. #define E_ATL_COULD_NOT_CONCAT            0x0210
  30. #define E_ATL_COMPOUND_KEY                0x0211
  31. #define E_ATL_INVALID_MAPKEY              0x0212
  32. #define E_ATL_UNSUPPORTED_VT              0x0213
  33. #define E_ATL_VALUE_GET_FAILED            0x0214
  34. #define E_ATL_VALUE_TOO_LARGE             0x0215
  35. #define E_ATL_MISSING_VALUE_DELIMETER     0x0216
  36. #define E_ATL_DATA_NOT_BYTE_ALIGNED       0x0217
  37.  
  38. #ifndef ATL_NO_NAMESPACE
  39. namespace ATL
  40. {
  41. #endif
  42.  
  43. const TCHAR  chSemiColon         = _T(';');
  44. const TCHAR  chDirSep            = _T('\\');
  45. const TCHAR  chEscape            = _T('\\');
  46. const TCHAR  chComma             = _T(',');
  47. const TCHAR  chDelete            = _T('~');
  48. const TCHAR  chEOS               = _T('\0');
  49. const TCHAR  chTab               = _T('\t');
  50. const TCHAR  chLF                = _T('\n');
  51. const TCHAR  chCR                = _T('\r');
  52. const TCHAR  chSpace             = _T(' ');
  53. const TCHAR  chRightBracket      = _T('}');
  54. const TCHAR  chLeftBracket       = _T('{');
  55. const TCHAR  chVarLead           = _T('%');
  56. const TCHAR  chQuote             = _T('\'');
  57. const TCHAR  chEquals            = _T('=');
  58. //const LPCTSTR  szRightBracket  = _T("}");
  59. //const LPCTSTR  szLeftBracket   = _T("{");
  60. //const LPCTSTR  szEquals            = _T("=");
  61. //const LPCTSTR  szDirSep          = _T("\\");
  62. const LPCTSTR  szStringVal       = _T("S");
  63. const LPCTSTR  szDwordVal        = _T("D");
  64. const LPCTSTR  szBinaryVal       = _T("B");
  65. const LPCTSTR  szValToken        = _T("Val");
  66. const LPCTSTR  szForceRemove     = _T("ForceRemove");
  67. const LPCTSTR  szNoRemove        = _T("NoRemove");
  68. const LPCTSTR  szDelete          = _T("Delete");
  69.  
  70. struct EXPANDER
  71. {
  72.     LPOLESTR    szKey;
  73.     LPOLESTR    szValue;
  74. };
  75.  
  76. class CExpansionVector
  77. {
  78. public:
  79.     CExpansionVector()
  80.     {
  81.         m_cEls = 0;
  82.         m_nSize=10;
  83.         m_p=(EXPANDER**)malloc(m_nSize*sizeof(EXPANDER*));
  84.     }
  85.     HRESULT Add(LPCOLESTR lpszKey, LPCOLESTR lpszValue);
  86.     LPCOLESTR Find(LPTSTR lpszKey);
  87.     HRESULT ClearReplacements();
  88.  
  89.  
  90. private:
  91.     EXPANDER** m_p;
  92.     int m_cEls;
  93.     int m_nSize;
  94. };
  95.  
  96.  
  97. #if defined(_ATL_DLL) | defined(_ATL_DLL_IMPL)
  98. class ATL_NO_VTABLE CRegObject
  99.  : public IRegistrar
  100. #else
  101. class CRegObject
  102. #endif
  103. {
  104. public:
  105.  
  106.     ~CRegObject(){ClearReplacements();}
  107.     HRESULT FinalConstruct() {return S_OK;}
  108.     void FinalRelease() {}
  109.  
  110.  
  111.     // Map based methods
  112.     HRESULT STDMETHODCALLTYPE AddReplacement(LPCOLESTR lpszKey, LPCOLESTR lpszItem);
  113.     HRESULT STDMETHODCALLTYPE ClearReplacements();
  114.     LPCOLESTR StrFromMap(LPTSTR lpszKey);
  115.  
  116.     // Register via a given mechanism
  117.     HRESULT STDMETHODCALLTYPE ResourceRegister(LPCOLESTR pszFileName, UINT nID, LPCOLESTR pszType);
  118.     HRESULT STDMETHODCALLTYPE ResourceRegisterSz(LPCOLESTR pszFileName, LPCOLESTR pszID, LPCOLESTR pszType);
  119.     HRESULT STDMETHODCALLTYPE ResourceUnregister(LPCOLESTR pszFileName, UINT nID, LPCOLESTR pszType);
  120.     HRESULT STDMETHODCALLTYPE ResourceUnregisterSz(LPCOLESTR pszFileName, LPCOLESTR pszID, LPCOLESTR pszType);
  121.     HRESULT STDMETHODCALLTYPE FileRegister(LPCOLESTR pszFileName);
  122.     HRESULT STDMETHODCALLTYPE FileUnregister(LPCOLESTR pszFileName);
  123.     HRESULT STDMETHODCALLTYPE StringRegister(LPCOLESTR pszData);
  124.     HRESULT STDMETHODCALLTYPE StringUnregister(LPCOLESTR pszData);
  125.  
  126. protected:
  127.  
  128.     HRESULT MemMapAndRegister(LPCOLESTR pszFileName, BOOL bRegister);
  129.     HRESULT RegisterFromResource(LPCOLESTR pszFileName, LPCTSTR pszID, LPCTSTR pszType, BOOL bRegister);
  130.     HRESULT RegisterWithString(LPCOLESTR pszData, BOOL bRegister);
  131.  
  132.  
  133.     static HRESULT GenerateError(UINT nID);
  134.  
  135.     CExpansionVector                                m_RepMap;
  136.     CComObjectThreadModel::AutoCriticalSection      m_csMap;
  137. };
  138.  
  139.  
  140. class CRegParser
  141. {
  142. public:
  143.     CRegParser(CRegObject* pRegObj);
  144.  
  145.     HRESULT  PreProcessBuffer(LPTSTR lpszReg, LPTSTR* ppszReg);
  146.     HRESULT  RegisterBuffer(LPTSTR szReg, BOOL bRegister);
  147.  
  148. protected:
  149.  
  150.     void    SkipWhiteSpace();
  151.     HRESULT NextToken(LPTSTR szToken);
  152.     HRESULT AddValue(CRegKey& rkParent,LPCTSTR szValueName, LPTSTR szToken);
  153.     BOOL    CanForceRemoveKey(LPCTSTR szKey);
  154.     BOOL    HasSubKeys(HKEY hkey);
  155.     BOOL    HasValues(HKEY hkey);
  156.     HRESULT RegisterSubkeys(HKEY hkParent, BOOL bRegister, BOOL bInRecovery = FALSE);
  157.     BOOL    IsSpace(TCHAR ch);
  158.     void    IncrementLinePos();
  159.     void    IncrementLineCount(){m_cLines++;}
  160.  
  161.  
  162.     LPTSTR  m_pchCur;
  163.     int     m_cLines;
  164.  
  165.     CRegObject*     m_pRegObj;
  166.  
  167.     HRESULT GenerateError(UINT nID);
  168.     HRESULT HandleReplacements(LPTSTR& szToken);
  169.     HRESULT SkipAssignment(LPTSTR szToken);
  170.  
  171.     BOOL    EndOfVar() { return chQuote == *m_pchCur && chQuote != *CharNext(m_pchCur); }
  172.  
  173. };
  174.  
  175. #ifndef ATL_NO_NAMESPACE
  176. }; //namespace ATL
  177. #endif
  178.  
  179. #endif //__STATREG_H
  180.